package com.demo.modules.mq.rabbit.configuration;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.HeadersExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * 消息头过滤，对消息的请求消息头进行匹配过滤，any（类似 or）:任意1个 all:全部（类似 and）
 *
 * @author MyPC
 */
@Configuration
public class HeaderConfiguration {

    /**
     * 声明一个header类型的交换机
     *
     * @return
     */
    @Bean
    public HeadersExchange headersExchange() {
        return new HeadersExchange("wr.header");
    }

    /**
     * 声明一个队列
     *
     * @return
     */
    @Bean
    public Queue queue09() {
        return new Queue("header.queue09");
    }

    /**
     * 声明一个队列
     *
     * @return
     */
    @Bean
    public Queue queue10() {
        return new Queue("header.queue10");
    }

    /**
     * 绑定交换机队列
     *
     * @param headersExchange
     * @param queue09
     * @return
     */
    @Bean
    public Binding binding09(HeadersExchange headersExchange, Queue queue09) {
        //创建绑定关系，并且声明固定字符
        return BindingBuilder.bind(queue09).to(headersExchange).whereAny("id", "author").exist();
    }

    /**
     * 绑定交换机队列
     *
     * @param headersExchange
     * @param queue10
     * @return
     */
    @Bean
    public Binding binding10(HeadersExchange headersExchange, Queue queue10) {
        //创建绑定关系，并且声明固定字符
        return BindingBuilder.bind(queue10).to(headersExchange).whereAll("id", "header").exist();
    }

}
